package com.ruoyi.project.small.domain;

import org.hibernate.annotations.DynamicInsert;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.HashMap;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;
import javax.persistence.GenerationType;
import java.util.Date;
import org.hibernate.annotations.DynamicUpdate;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * <p>
 * 用户表
 * </p>
 * 
 * @version 1.0
 * @author Justin Yang
 * @since 2020-05-24
 */
@Entity
@DynamicInsert
@DynamicUpdate
@Table(name = "sm_user")
@TableName(value =" sm_user", schema = "small_test")
@ApiModel("用户表")
public class SmUserEntity implements java.io.Serializable {

	private static final long serialVersionUID = -1L;

	/**
	 * 
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@TableId(value="id",type=IdType.AUTO)
	@Column(name = "id", nullable = false, unique = true, length = 11)
	@ApiModelProperty(value = "")
	private Integer id;

	/**
	 * 用户编码
	 */
	@TableField("user_no")
	@Column(name = "user_no", nullable = false, length = 20)
	@JsonSerialize(using = ToStringSerializer.class)
	@ApiModelProperty(value = "用户编码")
	private Long userNo;

	/**
	 * 手机号码
	 */
	@TableField("mobile")
	@Column(name = "mobile", nullable = false, length = 20)
	@ApiModelProperty(value = "手机号码")
	private String mobile;

	/**
	 * 用户账号
	 */
	@TableField("username")
	@Column(name = "username", length = 128)
	@ApiModelProperty(value = "用户账号")
	private String username;

	/**
	 * 用户密码
	 */
	@TableField("password")
	@Column(name = "password", nullable = false, length = 63)
	@ApiModelProperty(value = "用户密码")
	private String password;

	/**
	 * 微信登录openid
	 */
	@TableField("weixin_openid")
	@Column(name = "weixin_openid", nullable = false, length = 63)
	@ApiModelProperty(value = "微信登录openid")
	private String weixinOpenid;

	/**
	 * 用户昵称或网络名称
	 */
	@TableField("nickname")
	@Column(name = "nickname", nullable = false, length = 63)
	@ApiModelProperty(value = "用户昵称或网络名称")
	private String nickname;

	/**
	 * 用户头像图片
	 */
	@TableField("avatar")
	@Column(name = "avatar", nullable = false, length = 255)
	@ApiModelProperty(value = "用户头像图片")
	private String avatar;

	/**
	 * 性别：0未知，1男，1女
	 */
	@TableField("gender")
	@Column(name = "gender", nullable = false, length = 3)
	@ApiModelProperty(value = "性别：0未知，1男，1女")
	private Integer gender;

	/**
	 * 生日
	 */
	@TableField("birthday")
	@Temporal(TemporalType.TIMESTAMP)
	@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")
	@Column(name = "birthday")
	@ApiModelProperty(value = "生日")
	private Date birthday;

	/**
	 * 微信登录会话KEY
	 */
	@TableField("session_key")
	@Column(name = "session_key", nullable = false, length = 100)
	@ApiModelProperty(value = "微信登录会话KEY")
	private String sessionKey;

	/**
	 * 实名认证状态编码
	 */
	@TableField("cert_state_no")
	@Column(name = "cert_state_no", nullable = false, length = 8)
	@ApiModelProperty(value = "实名认证状态编码")
	private String certStateNo;

	/**
	 * 实名认证状态名称
	 */
	@TableField("cert_state_name")
	@Column(name = "cert_state_name", nullable = false, length = 32)
	@ApiModelProperty(value = "实名认证状态名称")
	private String certStateName;

	/**
	 * 推荐人用户编码
	 */
	@TableField("share_user_no")
	@Column(name = "share_user_no", length = 20)
	@JsonSerialize(using = ToStringSerializer.class)
	@ApiModelProperty(value = "推荐人用户编码")
	private Long shareUserNo;

	/**
	 * 二维码图片
	 */
	@TableField("share_qrcode_url")
	@Column(name = "share_qrcode_url", length = 256)
	@ApiModelProperty(value = "二维码图片")
	private String shareQrcodeUrl;

	/**
	 * 0可用,1禁用,2注销
	 */
	@TableField("status")
	@Column(name = "status", nullable = false, length = 3)
	@ApiModelProperty(value = "0可用,1禁用,2注销")
	private Integer status;

	/**
	 * 0普通用户，1VIP用户，2高级VIP用户
	 */
	@TableField("user_level")
	@Column(name = "user_level", length = 3)
	@ApiModelProperty(value = "0普通用户，1VIP用户，2高级VIP用户")
	private Integer userLevel;

	/**
	 * 最近一次登录IP地址
	 */
	@TableField("last_login_ip")
	@Column(name = "last_login_ip", nullable = false, length = 63)
	@ApiModelProperty(value = "最近一次登录IP地址")
	private String lastLoginIp;

	/**
	 * 最近一次登录时间
	 */
	@TableField("last_login_time")
	@Temporal(TemporalType.TIMESTAMP)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
	@Column(name = "last_login_time", nullable = false)
	@ApiModelProperty(value = "最近一次登录时间")
	private Date lastLoginTime;

	/**
	 * 创建时间
	 */
	@TableField("add_time")
	@Temporal(TemporalType.TIMESTAMP)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
	@Column(name = "add_time", nullable = false)
	@ApiModelProperty(value = "创建时间")
	private Date addTime;

	/**
	 * 更新时间
	 */
	@TableField("update_time")
	@Temporal(TemporalType.TIMESTAMP)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
	@Column(name = "update_time", nullable = false)
	@ApiModelProperty(value = "更新时间")
	private Date updateTime;

	/**
	 * 逻辑删除
	 */
	@TableField("deleted")
	@Column(name = "deleted", nullable = false, length = 1)
	@ApiModelProperty(value = "逻辑删除")
	private Integer deleted;

	/**
	 * 属性的公用set方法<br/>
	 * 
	 */
	public void setId(Integer value) {
		this.id = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 
	 */
    public Integer getId() {
		return this.id;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 用户编码
	 */
	public void setUserNo(Long value) {
		this.userNo = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 用户编码
	 */
    public Long getUserNo() {
		return this.userNo;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 手机号码
	 */
	public void setMobile(String value) {
		this.mobile = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 手机号码
	 */
    public String getMobile() {
		return this.mobile;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 用户账号
	 */
	public void setUsername(String value) {
		this.username = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 用户账号
	 */
    public String getUsername() {
		return this.username;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 用户密码
	 */
	public void setPassword(String value) {
		this.password = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 用户密码
	 */
    public String getPassword() {
		return this.password;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 微信登录openid
	 */
	public void setWeixinOpenid(String value) {
		this.weixinOpenid = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 微信登录openid
	 */
    public String getWeixinOpenid() {
		return this.weixinOpenid;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 用户昵称或网络名称
	 */
	public void setNickname(String value) {
		this.nickname = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 用户昵称或网络名称
	 */
    public String getNickname() {
		return this.nickname;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 用户头像图片
	 */
	public void setAvatar(String value) {
		this.avatar = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 用户头像图片
	 */
    public String getAvatar() {
		return this.avatar;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 性别：0未知，1男，1女
	 */
	public void setGender(Integer value) {
		this.gender = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 性别：0未知，1男，1女
	 */
    public Integer getGender() {
		return this.gender;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 生日
	 */
	public void setBirthday(Date value) {
		this.birthday = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 生日
	 */
    public Date getBirthday() {
		return this.birthday;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 微信登录会话KEY
	 */
	public void setSessionKey(String value) {
		this.sessionKey = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 微信登录会话KEY
	 */
    public String getSessionKey() {
		return this.sessionKey;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 实名认证状态编码
	 */
	public void setCertStateNo(String value) {
		this.certStateNo = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 实名认证状态编码
	 */
    public String getCertStateNo() {
		return this.certStateNo;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 实名认证状态名称
	 */
	public void setCertStateName(String value) {
		this.certStateName = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 实名认证状态名称
	 */
    public String getCertStateName() {
		return this.certStateName;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 推荐人用户编码
	 */
	public void setShareUserNo(Long value) {
		this.shareUserNo = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 推荐人用户编码
	 */
    public Long getShareUserNo() {
		return this.shareUserNo;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 二维码图片
	 */
	public void setShareQrcodeUrl(String value) {
		this.shareQrcodeUrl = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 二维码图片
	 */
    public String getShareQrcodeUrl() {
		return this.shareQrcodeUrl;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 0可用,1禁用,2注销
	 */
	public void setStatus(Integer value) {
		this.status = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 0可用,1禁用,2注销
	 */
    public Integer getStatus() {
		return this.status;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 0普通用户，1VIP用户，2高级VIP用户
	 */
	public void setUserLevel(Integer value) {
		this.userLevel = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 0普通用户，1VIP用户，2高级VIP用户
	 */
    public Integer getUserLevel() {
		return this.userLevel;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 最近一次登录IP地址
	 */
	public void setLastLoginIp(String value) {
		this.lastLoginIp = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 最近一次登录IP地址
	 */
    public String getLastLoginIp() {
		return this.lastLoginIp;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 最近一次登录时间
	 */
	public void setLastLoginTime(Date value) {
		this.lastLoginTime = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 最近一次登录时间
	 */
    public Date getLastLoginTime() {
		return this.lastLoginTime;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 创建时间
	 */
	public void setAddTime(Date value) {
		this.addTime = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 创建时间
	 */
    public Date getAddTime() {
		return this.addTime;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 更新时间
	 */
	public void setUpdateTime(Date value) {
		this.updateTime = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 更新时间
	 */
    public Date getUpdateTime() {
		return this.updateTime;
	}

	/**
	 * 属性的公用set方法<br/>
	 * 逻辑删除
	 */
	public void setDeleted(Integer value) {
		this.deleted = value;
    }

	/**
	 * 属性的公用get方法<br/>
	 * 逻辑删除
	 */
    public Integer getDeleted() {
		return this.deleted;
	}

	@Override
	public String toString() {
		 Map<String, Object> object = new HashMap<>();
		object.put("id", getId());
		object.put("userNo", getUserNo());
		object.put("mobile", getMobile());
		object.put("username", getUsername());
		object.put("password", getPassword());
		object.put("weixinOpenid", getWeixinOpenid());
		object.put("nickname", getNickname());
		object.put("avatar", getAvatar());
		object.put("gender", getGender());
		object.put("birthday", getBirthday());
		object.put("sessionKey", getSessionKey());
		object.put("certStateNo", getCertStateNo());
		object.put("certStateName", getCertStateName());
		object.put("shareUserNo", getShareUserNo());
		object.put("shareQrcodeUrl", getShareQrcodeUrl());
		object.put("status", getStatus());
		object.put("userLevel", getUserLevel());
		object.put("lastLoginIp", getLastLoginIp());
		object.put("lastLoginTime", getLastLoginTime());
		object.put("addTime", getAddTime());
		object.put("updateTime", getUpdateTime());
		object.put("deleted", getDeleted());
		 ObjectMapper mapper = new ObjectMapper();
		 String string = "Parse JSON has Exception";
		 try {
		  string = mapper.writeValueAsString(object);
		 } catch (JsonProcessingException e) {
		  e.printStackTrace();
         }
         return string;
	}

}
